package org.chnxi.study.leetcode.questions50.ques26;

import java.util.Arrays;

/**
 * 使用双指针方式，一次遍历集合
 * 第一个指针：记录不重复元素的位置
 * 第二个指针：从集合的第2个元素开始遍历，与第一个指针位置上的元素对比，不一致时，向后移动第一个指针，将新的元素放到指针位
 *
 * 执行用时：1 ms, 在所有 Java 提交中击败了98.01%的用户
 * 内存消耗：41.7 MB, 在所有 Java 提交中击败了5.74%的用户
 */
public class Simple02 {
    public static void main(String[] args) {
        int[] nums1 = {1, 1, 1, 1, 1, 2};
        int len1 = removeDuplicates(nums1);
        System.out.println("长度："+len1+";"+ Arrays.toString(nums1));

        int[] nums2 = {0,0,1,1,1,2,2,3,3,4};
        int len2 = removeDuplicates(nums2);
        System.out.println("长度："+len2 +";"+Arrays.toString(nums2));

        int[] nums3 = {1,1};
        int len3 = removeDuplicates(nums3);
        System.out.println("长度："+len3+";"+Arrays.toString(nums3));
    }

    public static int removeDuplicates(int[] nums) {
        // idx是第一个指针
        int idx = 0;
        // i是第二个指针，遍历nums所有元素
        for (int i=1; i<nums.length; i++){
            // 当发现非重复元素时，将元素放到idx的下一个位置
            if(nums[idx] != nums[i]){
                nums[++idx] = nums[i];
            }
        }
        return idx+1;
    }
}
